SquidとNLBとEFSを使って認証プロキシサーバーを冗長化してみた
認証プロキシサーバーを冗長化したい時ってありますよね
こんにちは、のんピ(@non____97)です。
皆さんはプロキシサーバー使っていますか? 私はそんなに使っていません。
使わない理由としては、単純にインターネットに出るためだけであれば、NAT Gatewayを使えば良いと思いますし、VPC Flow Logsでtcp/ipレベルのログを確認できるからです。
仮に、「URLフィルタリングもしたい!!」や「HTTPのログも見たい!!」となった場合は、Network Firewallを導入することで対応できます。
しかし、「認証したユーザーしか通信させたくない!!」といった要望を叶えるサービスは現時点では提供されていません。そこで、「それじゃあSquidを使って認証プロキシサーバーを作ろう!!」となると思います。
ここで注意しておきたいポイントがプロキシサーバーの可用性です。プロキシサーバーのように、通信経路上にリソースを配置するインライン構成になる場合、そのリソースが停止した際の影響が大きくなってしまいます。
そのため、今回は認証プロキシサーバーをMulti-AZで配置し、NLBを使って冗長化させます。
また、プロキシの認証の方式は、よく聞くBasic認証ではなく、Digest認証で実装します。(なんとなく)
いきなりまとめ
- Digest認証はBasic認証の様にパスワードが平文で流れない
- しかし、中間者攻撃に脆弱性がある
- また、パスワードはハッシュ化されているが、ユーザーID及びハッシュ値が漏洩すると第三者から不正に認証される可能性がある
- NLBを認証プロキシサーバーとクライアントの間に挟むことによって、アクセスが負荷分散される
- プロキシ認証用ユーザーの追加した際に、Squidのサービス再起動や設定のリロードは不要
- Auto Scallingを組み合わせると、より可用性を向上させることもできる
Digest認証とは
Digest認証(ダイジェスト認証)とは、HTTPで定義される認証方式の一つです。
認証方式でよく知られているBasic認証では、平文でユーザーIDとパスワードを送信してしまう欠点があります。当然、平文で認証情報を流してしまうと、盗聴や改ざんされる可能性が大きくなります。
Digest認証は、この欠点を改善した認証方式で、パスワードをハッシュ化して送信します。
Digest認証はRFC 7616に仕様が記載されています。Digest認証を使ってプロキシ認証をするフローは以下の通りです。
- クライアントがプロキシ認証が必要なURIをリクエストする。
- 認証プロキシサーバーはHTTPステータスコード
407
(Proxy Authentication Required)で、Proxy-Authenticateヘッダーに以下の情報を追加し、クライアントにレスポンスを返す。type
: 認証方式。今回の場合はDigest認証なので、Digest
realm
: 使用するユーザー名とパスワードをユーザーに知らせるためにユーザーに表示する文字列nonce
: サーバー側で生成したランダムな文字列opaque
: ランダムに生成されるデータstale
:nonce
が古いことが原因で、クライアントから要求が拒否されたことを示すフラグalgorithm
: Digestを生成するために使用されるアルゴリズムを示す文字列qop
: Quality of protectionの略で、auth
もしくはauth-int
のどちらかを渡す。auth-int
の場合、ボディも後述するresponse
の計算に使われる。
- HTTPステータスコード
407
を受け付けたクライアントは、Proxy-Authorizationヘッダーに以下の情報を追加し、リクエストを再試行する。response
: 以下のように計算された16進数の文字列-
A1 = unq(username) ":" unq(realm) ":" < user's password > A2 = Method ":" request-uri ":" H(entity-body) response = <"> < KD ( H(A1), unq(nonce) ":" nc ":" unq(cnonce) ":" unq(qop) ":" H(A2) ) <">
username
: 指定されたrealm
内のユーザーの名前realm
: Proxy-Authenticateヘッダーで説明した内容と同じURI
: HTTPリクエストの有効なリクエストURIqop
: Proxy-Authenticateヘッダーで説明した内容と同じcnonce
: クライアント側で生成したランダムな文字列nc
: クライアントが同じnonce
を使用した回数をカウントする値
- 認証プロキシサーバー側で、Proxy-Authorizationヘッダーに含まれる値とサーバー内に保存されているパスワードなどから
response
を計算し、クライアントから送られてきたresponse
と一致する場合に、認証成功とする。
認証フローを確認すると、確かにパスワードは平文で送信されていないですね。
しかし、Digest認証には以下の通り、中間者攻撃に脆弱性があります。
5.8. Man-in-the-Middle Attacks
Digest Authentication is vulnerable to man-in-the-middle (MITM) attacks, for example, from a hostile or compromised proxy. Clearly, this would present all the problems of eavesdropping. But, it also offers some additional opportunities to the attacker.
A possible man-in-the-middle attack would be to add a weak authentication scheme to the set of choices, hoping that the client will use one that exposes the user's credentials (e.g., password). For this reason, the client SHOULD always use the strongest scheme that it understands from the choices offered.
An even better MITM attack would be to remove all offered choices,replacing them with a challenge that requests only Basic authentication, then uses the cleartext credentials from the Basic authentication to authenticate to the origin server using the stronger scheme it requested. A particularly insidious way to mount such a MITM attack would be to offer a "free" proxy caching service to gullible users.
User agents should consider measures such as presenting a visual indication at the time of the credentials request of what authentication scheme is to be used, or remembering the strongest authentication scheme ever requested by a server and producing a warning message before using a weaker one. It might also be a good idea for the user agent to be configured to demand Digest authentication in general or from specific sites.
Or, a hostile proxy might spoof the client into making a request the attacker wanted rather than one the client wanted. Of course, this is still much harder than a comparable attack against Basic Authentication.
機械翻訳の結果は以下の通りです。
ダイジェスト認証は、敵対的なプロキシや危険なプロキシからの中間者(MITM)攻撃に弱い。 明らかに、これは盗聴のすべての問題を引き起こすでしょう。しかし、攻撃者にとっては新たなチャンスでもあります。
中間者攻撃として考えられるのは、弱い認証方式を選択肢に加え、ユーザーの認証情報(パスワードなど)を公開するものをクライアントが使用することを期待することです。 このため、クライアントは常に、提示された選択肢の中から自分が理解できる最強のスキームを使用すべきです(SHOULD)。
さらに優れたMITM攻撃は、提示されたすべての選択肢を削除し、Basic認証のみを要求するチャレンジに置き換え、Basic認証から得られた平文の認証情報を使用して、要求されたより強力なスキームを使用してオリジン・サーバを認証することです。 このようなMITM攻撃を行うための特に狡猾な方法は、騙されやすいユーザに「無料」のプロキシ・キャッシング・サービスを提供することです。
ユーザエージェントは、認証情報を要求する際に、どのような認証方式を使用するかを視覚的に示すことや、これまでにサーバから要求された最も強い認証方式を記憶しておき、弱い認証方式を使用する前に警告メッセージを表示するなどの対策を検討する必要があります。 また、一般的に、あるいは特定のサイトからダイジェスト認証を要求するようにユーザ・エージェントを設定することもよい考えである。
あるいは、敵対的なプロキシが、クライアントになりすまして、クライアントが望むリクエストではなく、攻撃者が望むリクエストを行うかもしれません。 もちろん、これはベーシック認証に対する同等の攻撃よりもはるかに困難です。
こちらのDigest認証に対する中間者攻撃のデモは徳丸先生がYouTubeで解説しています。
また、パスワードはハッシュ化されていますが、ユーザー名及びハッシュ値が漏洩すると第三者から不正に認証される可能性があります。こちらも、徳丸先生がYouTubeでデモを交えて解説しています。
検証の環境
今回の検証の構成図は以下の通りです。
認証プロキシサーバーとして、Squidを2台のEC2インスタンスにインストール・設定します。 そして、2台のEC2インスタンスをMulti-AZ構成にしてNLBで負荷分散されてるように構築します。
また、EFSファイルシステムはプロキシ認証用ユーザーの情報を保存し、各認証プロキシサーバーが認証時にアクセスできるようにしています。
各種リソースのデプロイ
各EC2インスタンスやNLB、EFSファイルシステムなどの環境一式をAWS CDKでデプロイします。
AWS CDKの実行環境のディレクトリの構成は以下の通りです。
> tree . ├── .gitignore ├── .npmignore ├── README.md ├── bin │ └── proxy-app.ts ├── cdk.context.json ├── cdk.json ├── jest.config.js ├── lib │ └── proxy-app-stack.ts ├── package-lock.json ├── package.json ├── src │ ├── cloudWatch │ │ └── AmazonCloudWatch-linux.json │ └── ec2 │ └── userDataSettingSquid.sh ├── test │ └── proxy-app.test.ts └── tsconfig.json 6 directories, 14 files
メインで動かすのは./lib/proxy-app-stack.ts
です。ここで全てのリソースを作成しています。
./lib/proxy-app-stack.ts
の大まかな処理の流れは以下の通りです。
- SSM用のIAMロールの作成
- VPCの作成
- SSM用のVPCエンドポイントの作成
- com.amazonaws.region.ssm
- com.amazonaws.region.ec2messages
- com.amazonaws.region.ssmmessages
- com.amazonaws.region.s3
- 認証プロキシサーバー用EC2インスタンスとEFSファイルシステム用のセキュリティグループの作成
- NLBの作成
- 認証プロキシサーバー用EC2インスタンスの作成
- クライアント用のEC2インスタンスの作成
- CloudWatch Agentの設定のSSMパラメーターストアへのアップロード
- EFSファイルシステムの作成
実際のコードは以下の通りです。
import * as cdk from "@aws-cdk/core"; import * as ec2 from "@aws-cdk/aws-ec2"; import * as iam from "@aws-cdk/aws-iam"; import * as elbv2 from "@aws-cdk/aws-elasticloadbalancingv2"; import * as ssm from "@aws-cdk/aws-ssm"; import * as efs from "@aws-cdk/aws-efs"; import * as fs from "fs"; export class ProxyAppStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Create SSM IAM role const ssmIamRole = new iam.Role(this, "SsmIamRole", { assumedBy: new iam.ServicePrincipal("ec2.amazonaws.com"), managedPolicies: [ iam.ManagedPolicy.fromAwsManagedPolicyName( "AmazonSSMManagedInstanceCore" ), iam.ManagedPolicy.fromAwsManagedPolicyName( "CloudWatchAgentAdminPolicy" ), ], }); // Create a VPC const vpc = new ec2.Vpc(this, "Vpc", { cidr: "10.0.0.0/24", enableDnsHostnames: true, enableDnsSupport: true, maxAzs: 2, natGateways: 2, subnetConfiguration: [ { name: "Public", subnetType: ec2.SubnetType.PUBLIC, cidrMask: 27, }, { name: "Private", subnetType: ec2.SubnetType.PRIVATE_WITH_NAT, cidrMask: 27, }, { name: "Isolated", subnetType: ec2.SubnetType.PRIVATE_ISOLATED, cidrMask: 27, }, ], }); // Create SSM Privatelink new ec2.InterfaceVpcEndpoint(this, "SsmVpcEndpoint", { vpc: vpc, service: ec2.InterfaceVpcEndpointAwsService.SSM, subnets: vpc.selectSubnets({ subnetGroupName: "Isolated" }), }); // Create SSM MESSAGES Privatelink new ec2.InterfaceVpcEndpoint(this, "SsmMessagesVpcEndpoint", { vpc: vpc, service: ec2.InterfaceVpcEndpointAwsService.SSM_MESSAGES, subnets: vpc.selectSubnets({ subnetGroupName: "Isolated" }), }); // Create EC2 MESSAGES Privatelink new ec2.InterfaceVpcEndpoint(this, "Ec2MessagesVpcEndpoint", { vpc: vpc, service: ec2.InterfaceVpcEndpointAwsService.EC2_MESSAGES, subnets: vpc.selectSubnets({ subnetGroupName: "Isolated" }), }); // // Create S3 Gateway new ec2.GatewayVpcEndpoint(this, "S3GatewayVpcEndpoint", { vpc: vpc, service: ec2.GatewayVpcEndpointAwsService.S3, }); // Create Security Group // For Proxy const proxySg = new ec2.SecurityGroup(this, "ProxySg", { allowAllOutbound: true, vpc: vpc, }); proxySg.addIngressRule(ec2.Peer.ipv4(vpc.vpcCidrBlock), ec2.Port.tcp(8080)); // For EFS const efsSg = new ec2.SecurityGroup(this, "EfsSg", { allowAllOutbound: true, vpc: vpc, }); efsSg.addIngressRule(ec2.Peer.ipv4(vpc.vpcCidrBlock), ec2.Port.tcp(2049)); // Create NLB const nlb = new elbv2.NetworkLoadBalancer(this, "Nlb", { vpc: vpc, vpcSubnets: vpc.selectSubnets({ subnetGroupName: "Private" }), crossZoneEnabled: true, internetFacing: false, }); // Create NLB Target group const targetGroup = new elbv2.NetworkTargetGroup(this, "TargetGroup", { vpc: vpc, port: 8080, targetType: elbv2.TargetType.INSTANCE, }); // Create NLB listener const listener = nlb.addListener("Listener", { port: 8080, defaultTargetGroups: [targetGroup], }); // User data for Amazon Linux const userDataParameter = fs.readFileSync( "./src/ec2/userDataSettingSquid.sh", "utf8" ); const userDataSettingPostfix = ec2.UserData.forLinux({ shebang: "#!/bin/bash", }); userDataSettingPostfix.addCommands(userDataParameter); // Create EC2 Instances // Proxy Server vpc .selectSubnets({ subnetGroupName: "Private" }) .subnets.forEach((subnet: ec2.ISubnet, index: number) => { const ec2Instance = new ec2.Instance( this, `ProxyEc2Instance-${index}`, { machineImage: ec2.MachineImage.latestAmazonLinux({ generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2, }), instanceType: new ec2.InstanceType("t3.micro"), vpc: vpc, role: ssmIamRole, vpcSubnets: vpc.selectSubnets({ subnetGroupName: "Private", availabilityZones: [vpc.availabilityZones[index]], }), securityGroup: proxySg, userData: userDataSettingPostfix, } ); targetGroup.addTarget( new elbv2.InstanceTarget(ec2Instance.instanceId, 8080) ); }); // Client new ec2.Instance(this, `ClientEc2Instance`, { machineImage: ec2.MachineImage.latestWindows( ec2.WindowsVersion.WINDOWS_SERVER_2019_JAPANESE_FULL_BASE ), instanceType: new ec2.InstanceType("t3.micro"), vpc: vpc, vpcSubnets: vpc.selectSubnets({ subnetGroupName: "Isolated", }), role: ssmIamRole, keyName: this.node.tryGetContext("key-pair"), }); // Read CloudWatch parameters for Linux const cloudWatchParameter = fs.readFileSync( "./src/cloudWatch/AmazonCloudWatch-linux.json", "utf8" ); // Create a new SSM Parameter for CloudWatch new ssm.StringParameter(this, "CloudWatchParameter", { description: "CloudWatch parameters for Linux", parameterName: "AmazonCloudWatch-linux", stringValue: cloudWatchParameter, }); // Create EFS file system new efs.FileSystem(this, "EfsFileSystem", { vpc: vpc, enableAutomaticBackups: true, encrypted: true, lifecyclePolicy: efs.LifecyclePolicy.AFTER_14_DAYS, performanceMode: efs.PerformanceMode.GENERAL_PURPOSE, removalPolicy: cdk.RemovalPolicy.DESTROY, securityGroup: efsSg, vpcSubnets: vpc.selectSubnets({ subnetGroupName: "Isolated" }), }); } }
Squidのインストールと設定及び、CloudWatch Agent用のcollectd
とDidges認証用のhttpd-tools
のインストールなどはUser Dataで行います。
実際のコードは以下の通りです。
# -x to display the command to be executed set -x # Redirect /var/log/user-data.log and /dev/console exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1 # Install the necessary packages. yum install -y squid httpd-tools amazon-linux-extras install -y collectd # Update yum update -y # Create a mount point for the EFS File system mkdir /etc/squid/secrets # Backup the squid configuration file. cp -a /etc/squid/squid.conf /etc/squid/squid.conf.`date +"%Y%m%d"` # Edit the squid configuration file. sed -i -E 's/http_port 3128/http_port 0.0.0.0:8080/g' /etc/squid/squid.conf sed -i -E '/^acl localnet src/d' /etc/squid/squid.conf sed -i -E "/^# should be allowed$/a acl localnet src 10.0.0.0/24" /etc/squid/squid.conf cat <<"EOF" | sed -i -E '/# from where browsing should be allowed/r /dev/stdin' /etc/squid/squid.conf # Require digest authentication. auth_param digest program /usr/lib64/squid/digest_file_auth -c /etc/squid/secrets/.digestpasswd auth_param digest children 20 startup=0 idle=1 auth_param digest realm Squid proxy-caching web server. It uses digest authentication. auth_param digest nonce_garbage_interval 5 minutes auth_param digest nonce_max_duration 30 minutes auth_param digest nonce_max_count 50 acl auth_users proxy_auth REQUIRED EOF sed -i -E "s/^http_access allow localnet/http_access allow localnet auth_users/g" /etc/squid/squid.conf tee /etc/squid/squid.conf -a <<"EOF" >/dev/null # Hiding client and proxy information forwarded_for off request_header_access Referer deny all request_header_access X-Forwarded-For deny all request_header_access Via deny all request_header_access Cache-Control deny all # Don't display the version on the error page. httpd_suppress_version_string on # Anonymize hostnames visible_hostname unknown # Setting log format to Apache combined logformat combined %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh access_log /var/log/squid/access.log combined EOF # Check the squid configuration file for incorrect descriptions. squid -k parse # Start squid. systemctl start squid # Check the status of squid. systemctl status squid # Enable squid auto-start. systemctl enable squid # Check the squid auto-start setting. systemctl is-enabled squid
CloudWatch Agentの設定をして、/var/log/messages
だけでなく、Squidのアクセスログである/var/log/squid/access.log
もCloudWatch Logsに出力させます。その前準備として、設定ファイルをSSMパラメーターストアにアップロードします。
実際のコードは以下の通りです。
{ "agent": { "metrics_collection_interval": 60, "run_as_user": "root" }, "logs": { "logs_collected": { "files": { "collect_list": [{ "file_path": "/var/log/messages", "log_group_name": "/var/log/messages", "log_stream_name": "{instance_id}" }, { "file_path": "/var/log/squid/access.log", "log_group_name": "/var/log/squid/access.log", "log_stream_name": "{instance_id}" } ] } } }, "metrics": { "append_dimensions": { "AutoScalingGroupName": "${aws:AutoScalingGroupName}", "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}" }, "metrics_collected": { "collectd": { "metrics_aggregation_interval": 60 }, "cpu": { "measurement": [ "cpu_usage_idle", "cpu_usage_iowait", "cpu_usage_user", "cpu_usage_system" ], "metrics_collection_interval": 60, "resources": [ "*" ], "totalcpu": false }, "disk": { "measurement": [ "used_percent", "inodes_free" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "diskio": { "measurement": [ "io_time", "write_bytes", "read_bytes", "writes", "reads" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "mem": { "measurement": [ "mem_used_percent" ], "metrics_collection_interval": 60 }, "netstat": { "measurement": [ "tcp_established", "tcp_time_wait" ], "metrics_collection_interval": 60 }, "statsd": { "metrics_aggregation_interval": 60, "metrics_collection_interval": 10, "service_address": ":8125" }, "swap": { "measurement": [ "swap_used_percent" ], "metrics_collection_interval": 60 } } } }
npx cdk deploy
で、AWS CDKでリソースをデプロイすると、以下のようなログが出力されます。
> npx cdk deploy MFA token for arn:aws:iam::<AWSアカウントID>:mfa/<IAMユーザー名>: 980007 This deployment will make potentially sensitive changes according to your current security approval level (--require-approval broadening). Please confirm you intend to make the following modifications: IAM Statement Changes ┌───┬───────────────────┬────────┬────────────────┬───────────────────────────────┬───────────┐ │ │ Resource │ Effect │ Action │ Principal │ Condition │ ├───┼───────────────────┼────────┼────────────────┼───────────────────────────────┼───────────┤ │ + │ ${SsmIamRole.Arn} │ Allow │ sts:AssumeRole │ Service:ec2.${AWS::URLSuffix} │ │ └───┴───────────────────┴────────┴────────────────┴───────────────────────────────┴───────────┘ IAM Policy Changes ┌───┬───────────────┬────────────────────────────────────────────────────────────────────┐ │ │ Resource │ Managed Policy ARN │ ├───┼───────────────┼────────────────────────────────────────────────────────────────────┤ │ + │ ${SsmIamRole} │ arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore │ │ + │ ${SsmIamRole} │ arn:${AWS::Partition}:iam::aws:policy/CloudWatchAgentAdminPolicy │ └───┴───────────────┴────────────────────────────────────────────────────────────────────┘ Security Group Changes ┌───┬────────────────────────────────────────────────────┬─────┬────────────┬──────────────────┐ │ │ Group │ Dir │ Protocol │ Peer │ ├───┼────────────────────────────────────────────────────┼─────┼────────────┼──────────────────┤ │ + │ ${ClientEc2Instance/InstanceSecurityGroup.GroupId} │ Out │ Everything │ Everyone (IPv4) │ ├───┼────────────────────────────────────────────────────┼─────┼────────────┼──────────────────┤ │ + │ ${Ec2MessagesVpcEndpoint/SecurityGroup.GroupId} │ In │ TCP 443 │ ${Vpc.CidrBlock} │ │ + │ ${Ec2MessagesVpcEndpoint/SecurityGroup.GroupId} │ Out │ Everything │ Everyone (IPv4) │ ├───┼────────────────────────────────────────────────────┼─────┼────────────┼──────────────────┤ │ + │ ${EfsSg.GroupId} │ In │ TCP 2049 │ ${Vpc.CidrBlock} │ │ + │ ${EfsSg.GroupId} │ Out │ Everything │ Everyone (IPv4) │ ├───┼────────────────────────────────────────────────────┼─────┼────────────┼──────────────────┤ │ + │ ${ProxySg.GroupId} │ In │ TCP 8080 │ ${Vpc.CidrBlock} │ │ + │ ${ProxySg.GroupId} │ Out │ Everything │ Everyone (IPv4) │ ├───┼────────────────────────────────────────────────────┼─────┼────────────┼──────────────────┤ │ + │ ${SsmMessagesVpcEndpoint/SecurityGroup.GroupId} │ In │ TCP 443 │ ${Vpc.CidrBlock} │ │ + │ ${SsmMessagesVpcEndpoint/SecurityGroup.GroupId} │ Out │ Everything │ Everyone (IPv4) │ ├───┼────────────────────────────────────────────────────┼─────┼────────────┼──────────────────┤ │ + │ ${SsmVpcEndpoint/SecurityGroup.GroupId} │ In │ TCP 443 │ ${Vpc.CidrBlock} │ │ + │ ${SsmVpcEndpoint/SecurityGroup.GroupId} │ Out │ Everything │ Everyone (IPv4) │ └───┴────────────────────────────────────────────────────┴─────┴────────────┴──────────────────┘ (NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299) Do you wish to deploy these changes (y/n)? y ProxyAppStack: deploying... ProxyAppStack: creating CloudFormation changeset... ✅ ProxyAppStack Stack ARN: arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/ProxyAppStack/25ff0270-1cf4-11ec-9e8a-0e02679e83b9
npx cdk deploy
実行完了後にマネージメントコンソールを確認すると、EC2インスタンスやNLB、ターゲットグループ、EFSファイルシステムが作成されていることが確認できます。
- EC2インスタンス
- NLB
- ターゲットグループ
- EFSファイルシステム
ターゲットグループに登録されているEC2インスタンスのステータスがどちらもhealthy
になっているので、Squidも正常に起動していそうですね。
念の為、User Dataに記載したシェルが正常に実行されているか確認するために、EC2インスタンス内の/var/log/user-data.log
を確認します。
かなり長いので折くなったので、折りたたみますが、squid.service
が起動(running
)していることが確認できます。
/var/log/user-data.log
+ yum install -y squid httpd-tools Loaded plugins: extras_suggestions, langpacks, priorities, update-motd Existing lock /var/run/yum.pid: another copy is running as pid 2375. Another app is currently holding the yum lock; waiting for it to exit... The other application is: yum Memory : 82 M RSS (298 MB VSZ) Started: Mon Sep 27 04:31:57 2021 - 00:02 ago State : Running, pid: 2375 Another app is currently holding the yum lock; waiting for it to exit... The other application is: yum Memory : 152 M RSS (369 MB VSZ) Started: Mon Sep 27 04:31:57 2021 - 00:04 ago State : Running, pid: 2375 Resolving Dependencies --> Running transaction check ---> Package httpd-tools.x86_64 0:2.4.48-2.amzn2 will be installed --> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-tools-2.4.48-2.amzn2.x86_64 --> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-tools-2.4.48-2.amzn2.x86_64 ---> Package squid.x86_64 7:3.5.20-17.amzn2.6.1 will be installed --> Processing Dependency: squid-migration-script for package: 7:squid-3.5.20-17.amzn2.6.1.x86_64 --> Processing Dependency: perl(Digest::MD5) for package: 7:squid-3.5.20-17.amzn2.6.1.x86_64 --> Processing Dependency: perl(Data::Dumper) for package: 7:squid-3.5.20-17.amzn2.6.1.x86_64 --> Processing Dependency: perl(DBI) for package: 7:squid-3.5.20-17.amzn2.6.1.x86_64 --> Processing Dependency: libltdl.so.7()(64bit) for package: 7:squid-3.5.20-17.amzn2.6.1.x86_64 --> Processing Dependency: libecap.so.3()(64bit) for package: 7:squid-3.5.20-17.amzn2.6.1.x86_64 --> Running transaction check ---> Package apr.x86_64 0:1.6.3-5.amzn2.0.2 will be installed ---> Package apr-util.x86_64 0:1.6.1-5.amzn2.0.2 will be installed --> Processing Dependency: apr-util-bdb(x86-64) = 1.6.1-5.amzn2.0.2 for package: apr-util-1.6.1-5.amzn2.0.2.x86_64 ---> Package libecap.x86_64 0:1.0.0-1.amzn2.0.2 will be installed ---> Package libtool-ltdl.x86_64 0:2.4.2-22.2.amzn2.0.2 will be installed ---> Package perl-DBI.x86_64 0:1.627-4.amzn2.0.2 will be installed --> Processing Dependency: perl(RPC::PlServer) >= 0.2001 for package: perl-DBI-1.627-4.amzn2.0.2.x86_64 --> Processing Dependency: perl(RPC::PlClient) >= 0.2000 for package: perl-DBI-1.627-4.amzn2.0.2.x86_64 ---> Package perl-Data-Dumper.x86_64 0:2.145-3.amzn2.0.2 will be installed ---> Package perl-Digest-MD5.x86_64 0:2.52-3.amzn2.0.2 will be installed --> Processing Dependency: perl(Digest::base) >= 1.00 for package: perl-Digest-MD5-2.52-3.amzn2.0.2.x86_64 ---> Package squid-migration-script.x86_64 7:3.5.20-17.amzn2.6.1 will be installed --> Running transaction check ---> Package apr-util-bdb.x86_64 0:1.6.1-5.amzn2.0.2 will be installed ---> Package perl-Digest.noarch 0:1.17-245.amzn2 will be installed ---> Package perl-PlRPC.noarch 0:0.2020-14.amzn2 will be installed --> Processing Dependency: perl(Net::Daemon) >= 0.13 for package: perl-PlRPC-0.2020-14.amzn2.noarch --> Processing Dependency: perl(Net::Daemon::Test) for package: perl-PlRPC-0.2020-14.amzn2.noarch --> Processing Dependency: perl(Net::Daemon::Log) for package: perl-PlRPC-0.2020-14.amzn2.noarch --> Processing Dependency: perl(Compress::Zlib) for package: perl-PlRPC-0.2020-14.amzn2.noarch --> Running transaction check ---> Package perl-IO-Compress.noarch 0:2.061-2.amzn2 will be installed --> Processing Dependency: perl(Compress::Raw::Zlib) >= 2.061 for package: perl-IO-Compress-2.061-2.amzn2.noarch --> Processing Dependency: perl(Compress::Raw::Bzip2) >= 2.061 for package: perl-IO-Compress-2.061-2.amzn2.noarch ---> Package perl-Net-Daemon.noarch 0:0.48-5.amzn2 will be installed --> Running transaction check ---> Package perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.amzn2.0.2 will be installed ---> Package perl-Compress-Raw-Zlib.x86_64 1:2.061-4.amzn2.0.2 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: httpd-tools x86_64 2.4.48-2.amzn2 amzn2-core 87 k squid x86_64 7:3.5.20-17.amzn2.6.1 amzn2-core 3.1 M Installing for dependencies: apr x86_64 1.6.3-5.amzn2.0.2 amzn2-core 118 k apr-util x86_64 1.6.1-5.amzn2.0.2 amzn2-core 99 k apr-util-bdb x86_64 1.6.1-5.amzn2.0.2 amzn2-core 19 k libecap x86_64 1.0.0-1.amzn2.0.2 amzn2-core 21 k libtool-ltdl x86_64 2.4.2-22.2.amzn2.0.2 amzn2-core 49 k perl-Compress-Raw-Bzip2 x86_64 2.061-3.amzn2.0.2 amzn2-core 32 k perl-Compress-Raw-Zlib x86_64 1:2.061-4.amzn2.0.2 amzn2-core 58 k perl-DBI x86_64 1.627-4.amzn2.0.2 amzn2-core 804 k perl-Data-Dumper x86_64 2.145-3.amzn2.0.2 amzn2-core 48 k perl-Digest noarch 1.17-245.amzn2 amzn2-core 23 k perl-Digest-MD5 x86_64 2.52-3.amzn2.0.2 amzn2-core 30 k perl-IO-Compress noarch 2.061-2.amzn2 amzn2-core 260 k perl-Net-Daemon noarch 0.48-5.amzn2 amzn2-core 51 k perl-PlRPC noarch 0.2020-14.amzn2 amzn2-core 36 k squid-migration-script x86_64 7:3.5.20-17.amzn2.6.1 amzn2-core 51 k Transaction Summary ================================================================================ Install 2 Packages (+15 Dependent packages) Total download size: 4.9 M Installed size: 14 M Downloading packages: -------------------------------------------------------------------------------- Total 17 MB/s | 4.9 MB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : perl-Data-Dumper-2.145-3.amzn2.0.2.x86_64 1/17 Installing : apr-1.6.3-5.amzn2.0.2.x86_64 2/17 Installing : apr-util-bdb-1.6.1-5.amzn2.0.2.x86_64 3/17 Installing : apr-util-1.6.1-5.amzn2.0.2.x86_64 4/17 Installing : perl-Digest-1.17-245.amzn2.noarch 5/17 Installing : perl-Digest-MD5-2.52-3.amzn2.0.2.x86_64 6/17 Installing : 7:squid-migration-script-3.5.20-17.amzn2.6.1.x86_64 7/17 Installing : perl-Compress-Raw-Bzip2-2.061-3.amzn2.0.2.x86_64 8/17 Installing : libecap-1.0.0-1.amzn2.0.2.x86_64 9/17 Installing : libtool-ltdl-2.4.2-22.2.amzn2.0.2.x86_64 10/17 Installing : perl-Net-Daemon-0.48-5.amzn2.noarch 11/17 Installing : 1:perl-Compress-Raw-Zlib-2.061-4.amzn2.0.2.x86_64 12/17 Installing : perl-IO-Compress-2.061-2.amzn2.noarch 13/17 Installing : perl-PlRPC-0.2020-14.amzn2.noarch 14/17 Installing : perl-DBI-1.627-4.amzn2.0.2.x86_64 15/17 Installing : 7:squid-3.5.20-17.amzn2.6.1.x86_64 16/17 Installing : httpd-tools-2.4.48-2.amzn2.x86_64 17/17 Verifying : apr-util-1.6.1-5.amzn2.0.2.x86_64 1/17 Verifying : 1:perl-Compress-Raw-Zlib-2.061-4.amzn2.0.2.x86_64 2/17 Verifying : apr-util-bdb-1.6.1-5.amzn2.0.2.x86_64 3/17 Verifying : perl-Net-Daemon-0.48-5.amzn2.noarch 4/17 Verifying : perl-Digest-MD5-2.52-3.amzn2.0.2.x86_64 5/17 Verifying : 7:squid-3.5.20-17.amzn2.6.1.x86_64 6/17 Verifying : httpd-tools-2.4.48-2.amzn2.x86_64 7/17 Verifying : libtool-ltdl-2.4.2-22.2.amzn2.0.2.x86_64 8/17 Verifying : libecap-1.0.0-1.amzn2.0.2.x86_64 9/17 Verifying : perl-PlRPC-0.2020-14.amzn2.noarch 10/17 Verifying : apr-1.6.3-5.amzn2.0.2.x86_64 11/17 Verifying : perl-IO-Compress-2.061-2.amzn2.noarch 12/17 Verifying : perl-Compress-Raw-Bzip2-2.061-3.amzn2.0.2.x86_64 13/17 Verifying : 7:squid-migration-script-3.5.20-17.amzn2.6.1.x86_64 14/17 Verifying : perl-Digest-1.17-245.amzn2.noarch 15/17 Verifying : perl-DBI-1.627-4.amzn2.0.2.x86_64 16/17 Verifying : perl-Data-Dumper-2.145-3.amzn2.0.2.x86_64 17/17 Installed: httpd-tools.x86_64 0:2.4.48-2.amzn2 squid.x86_64 7:3.5.20-17.amzn2.6.1 Dependency Installed: apr.x86_64 0:1.6.3-5.amzn2.0.2 apr-util.x86_64 0:1.6.1-5.amzn2.0.2 apr-util-bdb.x86_64 0:1.6.1-5.amzn2.0.2 libecap.x86_64 0:1.0.0-1.amzn2.0.2 libtool-ltdl.x86_64 0:2.4.2-22.2.amzn2.0.2 perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.amzn2.0.2 perl-Compress-Raw-Zlib.x86_64 1:2.061-4.amzn2.0.2 perl-DBI.x86_64 0:1.627-4.amzn2.0.2 perl-Data-Dumper.x86_64 0:2.145-3.amzn2.0.2 perl-Digest.noarch 0:1.17-245.amzn2 perl-Digest-MD5.x86_64 0:2.52-3.amzn2.0.2 perl-IO-Compress.noarch 0:2.061-2.amzn2 perl-Net-Daemon.noarch 0:0.48-5.amzn2 perl-PlRPC.noarch 0:0.2020-14.amzn2 squid-migration-script.x86_64 7:3.5.20-17.amzn2.6.1 Complete! + amazon-linux-extras install -y collectd Loaded plugins: extras_suggestions, langpacks, priorities, update-motd Existing lock /var/run/yum.pid: another copy is running as pid 2474. Another app is currently holding the yum lock; waiting for it to exit... The other application is: yum Memory : 71 M RSS (363 MB VSZ) Started: Mon Sep 27 04:32:06 2021 - 00:02 ago State : Sleeping, pid: 2474 Another app is currently holding the yum lock; waiting for it to exit... The other application is: yum Memory : 153 M RSS (445 MB VSZ) Started: Mon Sep 27 04:32:06 2021 - 00:04 ago State : Running, pid: 2474 Cleaning repos: amzn2-core amzn2extra-collectd amzn2extra-docker 17 metadata files removed 6 sqlite files removed 0 metadata files removed Loaded plugins: extras_suggestions, langpacks, priorities, update-motd Resolving Dependencies --> Running transaction check ---> Package collectd.x86_64 0:5.8.1-1.amzn2.0.1 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: collectd x86_64 5.8.1-1.amzn2.0.1 amzn2extra-collectd 706 k Transaction Summary ================================================================================ Install 1 Package Total download size: 706 k Installed size: 2.0 M Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : collectd-5.8.1-1.amzn2.0.1.x86_64 1/1 Verifying : collectd-5.8.1-1.amzn2.0.1.x86_64 1/1 Installed: collectd.x86_64 0:5.8.1-1.amzn2.0.1 Complete! Installing collectd 0 ansible2 available \ [ =2.4.2 =2.4.6 =2.8 =stable ] 2 httpd_modules available [ =1.0 =stable ] 3 memcached1.5 available \ [ =1.5.1 =1.5.16 =1.5.17 ] 5 postgresql9.6 available \ [ =9.6.6 =9.6.8 =stable ] 6 postgresql10 available [ =10 =stable ] 9 R3.4 available [ =3.4.3 =stable ] 10 rust1 available \ [ =1.22.1 =1.26.0 =1.26.1 =1.27.2 =1.31.0 =1.38.0 =stable ] 11 vim available [ =8.0 =stable ] 15 php7.2 available \ [ =7.2.0 =7.2.4 =7.2.5 =7.2.8 =7.2.11 =7.2.13 =7.2.14 =7.2.16 =7.2.17 =7.2.19 =7.2.21 =7.2.22 =7.2.23 =7.2.24 =7.2.26 =stable ] 17 lamp-mariadb10.2-php7.2 available \ [ =10.2.10_7.2.0 =10.2.10_7.2.4 =10.2.10_7.2.5 =10.2.10_7.2.8 =10.2.10_7.2.11 =10.2.10_7.2.13 =10.2.10_7.2.14 =10.2.10_7.2.16 =10.2.10_7.2.17 =10.2.10_7.2.19 =10.2.10_7.2.22 =10.2.10_7.2.23 =10.2.10_7.2.24 =stable ] 18 libreoffice available \ [ =5.0.6.2_15 =5.3.6.1 =stable ] 19 gimp available [ =2.8.22 ] 20 docker=latest enabled \ [ =17.12.1 =18.03.1 =18.06.1 =18.09.9 =stable ] 21 mate-desktop1.x available \ [ =1.19.0 =1.20.0 =stable ] 22 GraphicsMagick1.3 available \ [ =1.3.29 =1.3.32 =1.3.34 =stable ] 23 tomcat8.5 available \ [ =8.5.31 =8.5.32 =8.5.38 =8.5.40 =8.5.42 =8.5.50 =stable ] 24 epel available [ =7.11 =stable ] 25 testing available [ =1.0 =stable ] 26 ecs available [ =stable ] 27 corretto8 available \ [ =1.8.0_192 =1.8.0_202 =1.8.0_212 =1.8.0_222 =1.8.0_232 =1.8.0_242 =stable ] 28 firecracker available [ =0.11 =stable ] 29 golang1.11 available \ [ =1.11.3 =1.11.11 =1.11.13 =stable ] 30 squid4 available [ =4 =stable ] 31 php7.3 available \ [ =7.3.2 =7.3.3 =7.3.4 =7.3.6 =7.3.8 =7.3.9 =7.3.10 =7.3.11 =7.3.13 =stable ] 32 lustre2.10 available \ [ =2.10.5 =2.10.8 =stable ] 33 java-openjdk11 available [ =11 =stable ] 34 lynis available [ =stable ] 35 kernel-ng available [ =stable ] 36 BCC available [ =0.x =stable ] 37 mono available [ =5.x =stable ] 38 nginx1 available [ =stable ] 39 ruby2.6 available [ =2.6 =stable ] 40 mock available [ =stable ] 41 postgresql11 available [ =11 =stable ] 42 php7.4 available [ =stable ] 43 livepatch available [ =stable ] 44 python3.8 available [ =stable ] 45 haproxy2 available [ =stable ] 46 collectd=latest enabled [ =stable ] 47 aws-nitro-enclaves-cli available [ =stable ] 48 R4 available [ =stable ] 49 kernel-5.4 available [ =stable ] 50 selinux-ng available [ =stable ] 51 php8.0 available [ =stable ] 52 tomcat9 available [ =stable ] 53 unbound1.13 available [ =stable ] 54 mariadb10.5 available [ =stable ] 55 kernel-5.10 available [ =stable ] 56 redis6 available [ =stable ] 57 ruby3.0 available [ =stable ] 58 postgresql12 available [ =stable ] 59 postgresql13 available [ =stable ] 60 mock2 available [ =stable ] 61 dnsmasq2.85 available [ =stable ] + yum update -y Loaded plugins: extras_suggestions, langpacks, priorities, update-motd Resolving Dependencies --> Running transaction check ---> Package curl.x86_64 0:7.76.1-4.amzn2.0.1 will be updated ---> Package curl.x86_64 0:7.76.1-7.amzn2.0.2 will be an update ---> Package device-mapper.x86_64 7:1.02.146-4.amzn2.0.2 will be updated ---> Package device-mapper.x86_64 7:1.02.170-6.amzn2.5 will be an update ---> Package device-mapper-event.x86_64 7:1.02.146-4.amzn2.0.2 will be updated ---> Package device-mapper-event.x86_64 7:1.02.170-6.amzn2.5 will be an update ---> Package device-mapper-event-libs.x86_64 7:1.02.146-4.amzn2.0.2 will be updated ---> Package device-mapper-event-libs.x86_64 7:1.02.170-6.amzn2.5 will be an update ---> Package device-mapper-libs.x86_64 7:1.02.146-4.amzn2.0.2 will be updated ---> Package device-mapper-libs.x86_64 7:1.02.170-6.amzn2.5 will be an update ---> Package glibc.x86_64 0:2.26-48.amzn2 will be updated ---> Package glibc.x86_64 0:2.26-54.amzn2 will be an update ---> Package glibc-all-langpacks.x86_64 0:2.26-48.amzn2 will be updated ---> Package glibc-all-langpacks.x86_64 0:2.26-54.amzn2 will be an update ---> Package glibc-common.x86_64 0:2.26-48.amzn2 will be updated ---> Package glibc-common.x86_64 0:2.26-54.amzn2 will be an update ---> Package glibc-locale-source.x86_64 0:2.26-48.amzn2 will be updated ---> Package glibc-locale-source.x86_64 0:2.26-54.amzn2 will be an update ---> Package glibc-minimal-langpack.x86_64 0:2.26-48.amzn2 will be updated ---> Package glibc-minimal-langpack.x86_64 0:2.26-54.amzn2 will be an update ---> Package grub2.x86_64 1:2.06-2.amzn2.0.3 will be obsoleted ---> Package grub2.x86_64 1:2.06-2.amzn2.0.6 will be obsoleting ---> Package grub2-common.noarch 1:2.06-2.amzn2.0.3 will be updated ---> Package grub2-common.noarch 1:2.06-2.amzn2.0.6 will be an update ---> Package grub2-efi-x64-ec2.x86_64 1:2.06-2.amzn2.0.3 will be updated ---> Package grub2-efi-x64-ec2.x86_64 1:2.06-2.amzn2.0.6 will be an update ---> Package grub2-pc.x86_64 1:2.06-2.amzn2.0.3 will be updated ---> Package grub2-pc.x86_64 1:2.06-2.amzn2.0.6 will be obsoleting ---> Package grub2-pc-modules.noarch 1:2.06-2.amzn2.0.3 will be updated ---> Package grub2-pc-modules.noarch 1:2.06-2.amzn2.0.6 will be an update ---> Package grub2-tools.x86_64 1:2.06-2.amzn2.0.3 will be obsoleted ---> Package grub2-tools.x86_64 1:2.06-2.amzn2.0.6 will be obsoleting ---> Package grub2-tools-efi.x86_64 1:2.06-2.amzn2.0.6 will be obsoleting ---> Package grub2-tools-extra.x86_64 1:2.06-2.amzn2.0.6 will be obsoleting ---> Package grub2-tools-minimal.x86_64 1:2.06-2.amzn2.0.3 will be updated ---> Package grub2-tools-minimal.x86_64 1:2.06-2.amzn2.0.6 will be obsoleting ---> Package kernel.x86_64 0:4.14.246-187.474.amzn2 will be installed ---> Package kernel-tools.x86_64 0:4.14.243-185.433.amzn2 will be updated ---> Package kernel-tools.x86_64 0:4.14.246-187.474.amzn2 will be an update ---> Package libblkid.x86_64 0:2.30.2-2.amzn2.0.4 will be updated ---> Package libblkid.x86_64 0:2.30.2-2.amzn2.0.5 will be an update ---> Package libcrypt.x86_64 0:2.26-48.amzn2 will be updated ---> Package libcrypt.x86_64 0:2.26-54.amzn2 will be an update ---> Package libcurl.x86_64 0:7.76.1-4.amzn2.0.1 will be updated ---> Package libcurl.x86_64 0:7.76.1-7.amzn2.0.2 will be an update ---> Package libfdisk.x86_64 0:2.30.2-2.amzn2.0.4 will be updated ---> Package libfdisk.x86_64 0:2.30.2-2.amzn2.0.5 will be an update ---> Package libmount.x86_64 0:2.30.2-2.amzn2.0.4 will be updated ---> Package libmount.x86_64 0:2.30.2-2.amzn2.0.5 will be an update ---> Package libsmartcols.x86_64 0:2.30.2-2.amzn2.0.4 will be updated ---> Package libsmartcols.x86_64 0:2.30.2-2.amzn2.0.5 will be an update ---> Package libuuid.x86_64 0:2.30.2-2.amzn2.0.4 will be updated ---> Package libuuid.x86_64 0:2.30.2-2.amzn2.0.5 will be an update ---> Package lvm2.x86_64 7:2.02.177-4.amzn2.0.2 will be updated ---> Package lvm2.x86_64 7:2.02.187-6.amzn2.5 will be an update ---> Package lvm2-libs.x86_64 7:2.02.177-4.amzn2.0.2 will be updated ---> Package lvm2-libs.x86_64 7:2.02.187-6.amzn2.5 will be an update ---> Package openldap.x86_64 0:2.4.44-23.amzn2.0.1 will be updated ---> Package openldap.x86_64 0:2.4.44-23.amzn2.0.2 will be an update ---> Package systemd.x86_64 0:219-78.amzn2.0.14 will be updated ---> Package systemd.x86_64 0:219-78.amzn2.0.15 will be an update ---> Package systemd-libs.x86_64 0:219-78.amzn2.0.14 will be updated ---> Package systemd-libs.x86_64 0:219-78.amzn2.0.15 will be an update ---> Package systemd-sysv.x86_64 0:219-78.amzn2.0.14 will be updated ---> Package systemd-sysv.x86_64 0:219-78.amzn2.0.15 will be an update ---> Package util-linux.x86_64 0:2.30.2-2.amzn2.0.4 will be updated ---> Package util-linux.x86_64 0:2.30.2-2.amzn2.0.5 will be an update --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: grub2 x86_64 1:2.06-2.amzn2.0.6 amzn2-core 45 k replacing grub2.x86_64 1:2.06-2.amzn2.0.3 grub2-pc x86_64 1:2.06-2.amzn2.0.6 amzn2-core 44 k replacing grub2.x86_64 1:2.06-2.amzn2.0.3 grub2-tools x86_64 1:2.06-2.amzn2.0.6 amzn2-core 2.0 M replacing grub2-tools.x86_64 1:2.06-2.amzn2.0.3 grub2-tools-efi x86_64 1:2.06-2.amzn2.0.6 amzn2-core 560 k replacing grub2-tools.x86_64 1:2.06-2.amzn2.0.3 grub2-tools-extra x86_64 1:2.06-2.amzn2.0.6 amzn2-core 1.0 M replacing grub2-tools.x86_64 1:2.06-2.amzn2.0.3 grub2-tools-minimal x86_64 1:2.06-2.amzn2.0.6 amzn2-core 623 k replacing grub2-tools.x86_64 1:2.06-2.amzn2.0.3 kernel x86_64 4.14.246-187.474.amzn2 amzn2-core 21 M Updating: curl x86_64 7.76.1-7.amzn2.0.2 amzn2-core 345 k device-mapper x86_64 7:1.02.170-6.amzn2.5 amzn2-core 297 k device-mapper-event x86_64 7:1.02.170-6.amzn2.5 amzn2-core 192 k device-mapper-event-libs x86_64 7:1.02.170-6.amzn2.5 amzn2-core 192 k device-mapper-libs x86_64 7:1.02.170-6.amzn2.5 amzn2-core 326 k glibc x86_64 2.26-54.amzn2 amzn2-core 3.3 M glibc-all-langpacks x86_64 2.26-54.amzn2 amzn2-core 7.0 M glibc-common x86_64 2.26-54.amzn2 amzn2-core 772 k glibc-locale-source x86_64 2.26-54.amzn2 amzn2-core 3.2 M glibc-minimal-langpack x86_64 2.26-54.amzn2 amzn2-core 31 k grub2-common noarch 1:2.06-2.amzn2.0.6 amzn2-core 1.7 M grub2-efi-x64-ec2 x86_64 1:2.06-2.amzn2.0.6 amzn2-core 281 k grub2-pc-modules noarch 1:2.06-2.amzn2.0.6 amzn2-core 938 k kernel-tools x86_64 4.14.246-187.474.amzn2 amzn2-core 152 k libblkid x86_64 2.30.2-2.amzn2.0.5 amzn2-core 190 k libcrypt x86_64 2.26-54.amzn2 amzn2-core 51 k libcurl x86_64 7.76.1-7.amzn2.0.2 amzn2-core 314 k libfdisk x86_64 2.30.2-2.amzn2.0.5 amzn2-core 237 k libmount x86_64 2.30.2-2.amzn2.0.5 amzn2-core 212 k libsmartcols x86_64 2.30.2-2.amzn2.0.5 amzn2-core 155 k libuuid x86_64 2.30.2-2.amzn2.0.5 amzn2-core 79 k lvm2 x86_64 7:2.02.187-6.amzn2.5 amzn2-core 1.3 M lvm2-libs x86_64 7:2.02.187-6.amzn2.5 amzn2-core 1.1 M openldap x86_64 2.4.44-23.amzn2.0.2 amzn2-core 350 k systemd x86_64 219-78.amzn2.0.15 amzn2-core 5.0 M systemd-libs x86_64 219-78.amzn2.0.15 amzn2-core 408 k systemd-sysv x86_64 219-78.amzn2.0.15 amzn2-core 97 k util-linux x86_64 2.30.2-2.amzn2.0.5 amzn2-core 2.3 M Transaction Summary ================================================================================ Install 7 Packages Upgrade 28 Packages Total download size: 56 M Downloading packages: Delta RPMs disabled because /usr/bin/applydeltarpm not installed. -------------------------------------------------------------------------------- Total 65 MB/s | 56 MB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Updating : 1:grub2-common-2.06-2.amzn2.0.6.noarch 1/67 Updating : glibc-minimal-langpack-2.26-54.amzn2.x86_64 2/67 Updating : glibc-2.26-54.amzn2.x86_64 3/67 Updating : glibc-common-2.26-54.amzn2.x86_64 4/67 Updating : systemd-libs-219-78.amzn2.0.15.x86_64 5/67 Updating : libuuid-2.30.2-2.amzn2.0.5.x86_64 6/67 Updating : libblkid-2.30.2-2.amzn2.0.5.x86_64 7/67 Updating : libmount-2.30.2-2.amzn2.0.5.x86_64 8/67 Updating : libcrypt-2.26-54.amzn2.x86_64 9/67 Updating : openldap-2.4.44-23.amzn2.0.2.x86_64 10/67 Updating : libcurl-7.76.1-7.amzn2.0.2.x86_64 11/67 Updating : systemd-219-78.amzn2.0.15.x86_64 12/67 Updating : libfdisk-2.30.2-2.amzn2.0.5.x86_64 13/67 Updating : libsmartcols-2.30.2-2.amzn2.0.5.x86_64 14/67 Updating : util-linux-2.30.2-2.amzn2.0.5.x86_64 15/67 Updating : 7:device-mapper-libs-1.02.170-6.amzn2.5.x86_64 16/67 Updating : 7:device-mapper-1.02.170-6.amzn2.5.x86_64 17/67 Updating : 7:device-mapper-event-libs-1.02.170-6.amzn2.5.x86_64 18/67 Installing : 1:grub2-tools-minimal-2.06-2.amzn2.0.6.x86_64 19/67 Installing : 1:grub2-tools-2.06-2.amzn2.0.6.x86_64 20/67 Updating : 7:device-mapper-event-1.02.170-6.amzn2.5.x86_64 21/67 Updating : 7:lvm2-libs-2.02.187-6.amzn2.5.x86_64 22/67 Updating : 1:grub2-pc-modules-2.06-2.amzn2.0.6.noarch 23/67 Installing : 1:grub2-pc-2.06-2.amzn2.0.6.x86_64 24/67 Installing : 1:grub2-2.06-2.amzn2.0.6.x86_64 25/67 Updating : 7:lvm2-2.02.187-6.amzn2.5.x86_64 26/67 Updating : 1:grub2-efi-x64-ec2-2.06-2.amzn2.0.6.x86_64 27/67 Installing : 1:grub2-tools-extra-2.06-2.amzn2.0.6.x86_64 28/67 Installing : 1:grub2-tools-efi-2.06-2.amzn2.0.6.x86_64 29/67 Updating : systemd-sysv-219-78.amzn2.0.15.x86_64 30/67 Updating : curl-7.76.1-7.amzn2.0.2.x86_64 31/67 Updating : glibc-locale-source-2.26-54.amzn2.x86_64 32/67 Updating : glibc-all-langpacks-2.26-54.amzn2.x86_64 33/67 Updating : kernel-tools-4.14.246-187.474.amzn2.x86_64 34/67 Installing : kernel-4.14.246-187.474.amzn2.x86_64 35/67 Cleanup : 1:grub2-efi-x64-ec2-2.06-2.amzn2.0.3.x86_64 36/67 Cleanup : glibc-all-langpacks-2.26-48.amzn2.x86_64 37/67 Cleanup : glibc-locale-source-2.26-48.amzn2.x86_64 38/67 Cleanup : 1:grub2-2.06-2.amzn2.0.3.x86_64 39/67 Cleanup : 1:grub2-pc-2.06-2.amzn2.0.3.x86_64 40/67 Cleanup : 1:grub2-pc-modules-2.06-2.amzn2.0.3.noarch 41/67 Cleanup : systemd-sysv-219-78.amzn2.0.14.x86_64 42/67 Cleanup : 7:lvm2-2.02.177-4.amzn2.0.2.x86_64 43/67 Cleanup : 7:lvm2-libs-2.02.177-4.amzn2.0.2.x86_64 44/67 Cleanup : 7:device-mapper-event-1.02.146-4.amzn2.0.2.x86_64 45/67 Cleanup : 1:grub2-tools-minimal-2.06-2.amzn2.0.3.x86_64 46/67 Cleanup : 1:grub2-tools-2.06-2.amzn2.0.3.x86_64 47/67 Cleanup : curl-7.76.1-4.amzn2.0.1.x86_64 48/67 Cleanup : 7:device-mapper-event-libs-1.02.146-4.amzn2.0.2.x86_64 49/67 Cleanup : 7:device-mapper-1.02.146-4.amzn2.0.2.x86_64 50/67 Cleanup : 7:device-mapper-libs-1.02.146-4.amzn2.0.2.x86_64 51/67 Cleanup : util-linux-2.30.2-2.amzn2.0.4.x86_64 52/67 Cleanup : systemd-219-78.amzn2.0.14.x86_64 53/67 Cleanup : libmount-2.30.2-2.amzn2.0.4.x86_64 54/67 Cleanup : libfdisk-2.30.2-2.amzn2.0.4.x86_64 55/67 Cleanup : libblkid-2.30.2-2.amzn2.0.4.x86_64 56/67 Cleanup : libcurl-7.76.1-4.amzn2.0.1.x86_64 57/67 Cleanup : openldap-2.4.44-23.amzn2.0.1.x86_64 58/67 Cleanup : libuuid-2.30.2-2.amzn2.0.4.x86_64 59/67 Cleanup : libcrypt-2.26-48.amzn2.x86_64 60/67 Cleanup : systemd-libs-219-78.amzn2.0.14.x86_64 61/67 Cleanup : libsmartcols-2.30.2-2.amzn2.0.4.x86_64 62/67 Cleanup : kernel-tools-4.14.243-185.433.amzn2.x86_64 63/67 Cleanup : 1:grub2-common-2.06-2.amzn2.0.3.noarch 64/67 Cleanup : glibc-minimal-langpack-2.26-48.amzn2.x86_64 65/67 Cleanup : glibc-2.26-48.amzn2.x86_64 66/67 Cleanup : glibc-common-2.26-48.amzn2.x86_64 67/67 Verifying : glibc-common-2.26-54.amzn2.x86_64 1/67 Verifying : systemd-sysv-219-78.amzn2.0.15.x86_64 2/67 Verifying : libcrypt-2.26-54.amzn2.x86_64 3/67 Verifying : 7:device-mapper-event-libs-1.02.170-6.amzn2.5.x86_64 4/67 Verifying : 1:grub2-tools-efi-2.06-2.amzn2.0.6.x86_64 5/67 Verifying : libmount-2.30.2-2.amzn2.0.5.x86_64 6/67 Verifying : systemd-219-78.amzn2.0.15.x86_64 7/67 Verifying : 1:grub2-common-2.06-2.amzn2.0.6.noarch 8/67 Verifying : systemd-libs-219-78.amzn2.0.15.x86_64 9/67 Verifying : 7:lvm2-2.02.187-6.amzn2.5.x86_64 10/67 Verifying : glibc-minimal-langpack-2.26-54.amzn2.x86_64 11/67 Verifying : 1:grub2-2.06-2.amzn2.0.6.x86_64 12/67 Verifying : glibc-locale-source-2.26-54.amzn2.x86_64 13/67 Verifying : openldap-2.4.44-23.amzn2.0.2.x86_64 14/67 Verifying : 7:device-mapper-libs-1.02.170-6.amzn2.5.x86_64 15/67 Verifying : 1:grub2-tools-extra-2.06-2.amzn2.0.6.x86_64 16/67 Verifying : 1:grub2-tools-minimal-2.06-2.amzn2.0.6.x86_64 17/67 Verifying : kernel-tools-4.14.246-187.474.amzn2.x86_64 18/67 Verifying : libcurl-7.76.1-7.amzn2.0.2.x86_64 19/67 Verifying : kernel-4.14.246-187.474.amzn2.x86_64 20/67 Verifying : 1:grub2-tools-2.06-2.amzn2.0.6.x86_64 21/67 Verifying : 1:grub2-efi-x64-ec2-2.06-2.amzn2.0.6.x86_64 22/67 Verifying : 7:device-mapper-1.02.170-6.amzn2.5.x86_64 23/67 Verifying : util-linux-2.30.2-2.amzn2.0.5.x86_64 24/67 Verifying : curl-7.76.1-7.amzn2.0.2.x86_64 25/67 Verifying : 7:device-mapper-event-1.02.170-6.amzn2.5.x86_64 26/67 Verifying : 7:lvm2-libs-2.02.187-6.amzn2.5.x86_64 27/67 Verifying : glibc-all-langpacks-2.26-54.amzn2.x86_64 28/67 Verifying : libfdisk-2.30.2-2.amzn2.0.5.x86_64 29/67 Verifying : libblkid-2.30.2-2.amzn2.0.5.x86_64 30/67 Verifying : 1:grub2-pc-modules-2.06-2.amzn2.0.6.noarch 31/67 Verifying : 1:grub2-pc-2.06-2.amzn2.0.6.x86_64 32/67 Verifying : libuuid-2.30.2-2.amzn2.0.5.x86_64 33/67 Verifying : libsmartcols-2.30.2-2.amzn2.0.5.x86_64 34/67 Verifying : glibc-2.26-54.amzn2.x86_64 35/67 Verifying : glibc-common-2.26-48.amzn2.x86_64 36/67 Verifying : 1:grub2-pc-modules-2.06-2.amzn2.0.3.noarch 37/67 Verifying : 7:device-mapper-libs-1.02.146-4.amzn2.0.2.x86_64 38/67 Verifying : curl-7.76.1-4.amzn2.0.1.x86_64 39/67 Verifying : openldap-2.4.44-23.amzn2.0.1.x86_64 40/67 Verifying : glibc-all-langpacks-2.26-48.amzn2.x86_64 41/67 Verifying : glibc-locale-source-2.26-48.amzn2.x86_64 42/67 Verifying : libfdisk-2.30.2-2.amzn2.0.4.x86_64 43/67 Verifying : libcrypt-2.26-48.amzn2.x86_64 44/67 Verifying : 1:grub2-tools-minimal-2.06-2.amzn2.0.3.x86_64 45/67 Verifying : libblkid-2.30.2-2.amzn2.0.4.x86_64 46/67 Verifying : 1:grub2-common-2.06-2.amzn2.0.3.noarch 47/67 Verifying : glibc-2.26-48.amzn2.x86_64 48/67 Verifying : 1:grub2-efi-x64-ec2-2.06-2.amzn2.0.3.x86_64 49/67 Verifying : libsmartcols-2.30.2-2.amzn2.0.4.x86_64 50/67 Verifying : 1:grub2-tools-2.06-2.amzn2.0.3.x86_64 51/67 Verifying : libcurl-7.76.1-4.amzn2.0.1.x86_64 52/67 Verifying : systemd-sysv-219-78.amzn2.0.14.x86_64 53/67 Verifying : glibc-minimal-langpack-2.26-48.amzn2.x86_64 54/67 Verifying : util-linux-2.30.2-2.amzn2.0.4.x86_64 55/67 Verifying : 1:grub2-2.06-2.amzn2.0.3.x86_64 56/67 Verifying : 1:grub2-pc-2.06-2.amzn2.0.3.x86_64 57/67 Verifying : 7:lvm2-2.02.177-4.amzn2.0.2.x86_64 58/67 Verifying : systemd-219-78.amzn2.0.14.x86_64 59/67 Verifying : systemd-libs-219-78.amzn2.0.14.x86_64 60/67 Verifying : 7:device-mapper-1.02.146-4.amzn2.0.2.x86_64 61/67 Verifying : 7:lvm2-libs-2.02.177-4.amzn2.0.2.x86_64 62/67 Verifying : libmount-2.30.2-2.amzn2.0.4.x86_64 63/67 Verifying : libuuid-2.30.2-2.amzn2.0.4.x86_64 64/67 Verifying : kernel-tools-4.14.243-185.433.amzn2.x86_64 65/67 Verifying : 7:device-mapper-event-libs-1.02.146-4.amzn2.0.2.x86_64 66/67 Verifying : 7:device-mapper-event-1.02.146-4.amzn2.0.2.x86_64 67/67 Installed: grub2.x86_64 1:2.06-2.amzn2.0.6 grub2-pc.x86_64 1:2.06-2.amzn2.0.6 grub2-tools.x86_64 1:2.06-2.amzn2.0.6 grub2-tools-efi.x86_64 1:2.06-2.amzn2.0.6 grub2-tools-extra.x86_64 1:2.06-2.amzn2.0.6 grub2-tools-minimal.x86_64 1:2.06-2.amzn2.0.6 kernel.x86_64 0:4.14.246-187.474.amzn2 Updated: curl.x86_64 0:7.76.1-7.amzn2.0.2 device-mapper.x86_64 7:1.02.170-6.amzn2.5 device-mapper-event.x86_64 7:1.02.170-6.amzn2.5 device-mapper-event-libs.x86_64 7:1.02.170-6.amzn2.5 device-mapper-libs.x86_64 7:1.02.170-6.amzn2.5 glibc.x86_64 0:2.26-54.amzn2 glibc-all-langpacks.x86_64 0:2.26-54.amzn2 glibc-common.x86_64 0:2.26-54.amzn2 glibc-locale-source.x86_64 0:2.26-54.amzn2 glibc-minimal-langpack.x86_64 0:2.26-54.amzn2 grub2-common.noarch 1:2.06-2.amzn2.0.6 grub2-efi-x64-ec2.x86_64 1:2.06-2.amzn2.0.6 grub2-pc-modules.noarch 1:2.06-2.amzn2.0.6 kernel-tools.x86_64 0:4.14.246-187.474.amzn2 libblkid.x86_64 0:2.30.2-2.amzn2.0.5 libcrypt.x86_64 0:2.26-54.amzn2 libcurl.x86_64 0:7.76.1-7.amzn2.0.2 libfdisk.x86_64 0:2.30.2-2.amzn2.0.5 libmount.x86_64 0:2.30.2-2.amzn2.0.5 libsmartcols.x86_64 0:2.30.2-2.amzn2.0.5 libuuid.x86_64 0:2.30.2-2.amzn2.0.5 lvm2.x86_64 7:2.02.187-6.amzn2.5 lvm2-libs.x86_64 7:2.02.187-6.amzn2.5 openldap.x86_64 0:2.4.44-23.amzn2.0.2 systemd.x86_64 0:219-78.amzn2.0.15 systemd-libs.x86_64 0:219-78.amzn2.0.15 systemd-sysv.x86_64 0:219-78.amzn2.0.15 util-linux.x86_64 0:2.30.2-2.amzn2.0.5 Replaced: grub2.x86_64 1:2.06-2.amzn2.0.3 grub2-tools.x86_64 1:2.06-2.amzn2.0.3 Complete! + mkdir /etc/squid/secrets ++ date +%Y%m%d + cp -a /etc/squid/squid.conf /etc/squid/squid.conf.20210927 + sed -i -E 's/http_port 3128/http_port 0.0.0.0:8080/g' /etc/squid/squid.conf + sed -i -E '/^acl localnet src/d' /etc/squid/squid.conf + sed -i -E '/^# should be allowed$/a acl localnet src 10.0.0.0/24' /etc/squid/squid.conf + cat + sed -i -E '/# from where browsing should be allowed/r /dev/stdin' /etc/squid/squid.conf + sed -i -E 's/^http_access allow localnet/http_access allow localnet auth_users/g' /etc/squid/squid.conf + tee /etc/squid/squid.conf -a + squid -k parse 2021/09/27 04:32:41| Startup: Initializing Authentication Schemes ... 2021/09/27 04:32:41| Startup: Initialized Authentication Scheme 'basic' 2021/09/27 04:32:41| Startup: Initialized Authentication Scheme 'digest' 2021/09/27 04:32:41| Startup: Initialized Authentication Scheme 'negotiate' 2021/09/27 04:32:41| Startup: Initialized Authentication Scheme 'ntlm' 2021/09/27 04:32:41| Startup: Initialized Authentication. 2021/09/27 04:32:41| Processing Configuration File: /etc/squid/squid.conf (depth 0) 2021/09/27 04:32:41| Processing: acl localnet src 10.0.0.0/24 2021/09/27 04:32:41| Processing: acl SSL_ports port 443 2021/09/27 04:32:41| Processing: acl Safe_ports port 80 # http 2021/09/27 04:32:41| Processing: acl Safe_ports port 21 # ftp 2021/09/27 04:32:41| Processing: acl Safe_ports port 443 # https 2021/09/27 04:32:41| Processing: acl Safe_ports port 70 # gopher 2021/09/27 04:32:41| Processing: acl Safe_ports port 210 # wais 2021/09/27 04:32:41| Processing: acl Safe_ports port 1025-65535 # unregistered ports 2021/09/27 04:32:41| Processing: acl Safe_ports port 280 # http-mgmt 2021/09/27 04:32:41| Processing: acl Safe_ports port 488 # gss-http 2021/09/27 04:32:41| Processing: acl Safe_ports port 591 # filemaker 2021/09/27 04:32:41| Processing: acl Safe_ports port 777 # multiling http 2021/09/27 04:32:41| Processing: acl CONNECT method CONNECT 2021/09/27 04:32:41| Processing: http_access deny !Safe_ports 2021/09/27 04:32:41| Processing: http_access deny CONNECT !SSL_ports 2021/09/27 04:32:41| Processing: http_access allow localhost manager 2021/09/27 04:32:41| Processing: http_access deny manager 2021/09/27 04:32:41| Processing: auth_param digest program /usr/lib64/squid/digest_file_auth -c /etc/squid/secrets/.digestpasswd 2021/09/27 04:32:41| Processing: auth_param digest children 20 startup=0 idle=1 2021/09/27 04:32:41| Processing: auth_param digest realm Squid proxy-caching web server. It uses digest authentication. 2021/09/27 04:32:41| Processing: auth_param digest nonce_garbage_interval 5 minutes 2021/09/27 04:32:41| Processing: auth_param digest nonce_max_duration 30 minutes 2021/09/27 04:32:41| Processing: auth_param digest nonce_max_count 50 2021/09/27 04:32:41| Processing: acl auth_users proxy_auth REQUIRED 2021/09/27 04:32:41| Processing: http_access allow localnet auth_users 2021/09/27 04:32:41| Processing: http_access allow localhost 2021/09/27 04:32:41| Processing: http_access deny all 2021/09/27 04:32:41| Processing: http_port 0.0.0.0:8080 2021/09/27 04:32:41| Processing: coredump_dir /var/spool/squid 2021/09/27 04:32:41| Processing: refresh_pattern ^ftp: 1440 20% 10080 2021/09/27 04:32:41| Processing: refresh_pattern ^gopher: 1440 0% 1440 2021/09/27 04:32:41| Processing: refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 2021/09/27 04:32:41| Processing: refresh_pattern . 0 20% 4320 2021/09/27 04:32:41| Processing: forwarded_for off 2021/09/27 04:32:41| Processing: request_header_access Referer deny all 2021/09/27 04:32:41| Processing: request_header_access X-Forwarded-For deny all 2021/09/27 04:32:41| Processing: request_header_access Via deny all 2021/09/27 04:32:41| Processing: request_header_access Cache-Control deny all 2021/09/27 04:32:41| Processing: httpd_suppress_version_string on 2021/09/27 04:32:41| Processing: visible_hostname unknown 2021/09/27 04:32:41| Processing: logformat combined %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh 2021/09/27 04:32:41| Processing: access_log /var/log/squid/access.log combined 2021/09/27 04:32:41| Initializing https proxy context + systemctl start squid + systemctl status squid ● squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2021-09-27 04:32:41 UTC; 8ms ago Process: 6892 ExecStart=/usr/sbin/squid $SQUID_OPTS -f $SQUID_CONF (code=exited, status=0/SUCCESS) Process: 6886 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS) Main PID: 6894 (squid) CGroup: /system.slice/squid.service └─6894 /usr/sbin/squid -f /etc/squid/squid.conf Sep 27 04:32:41 ip-10-0-0-83.ec2.internal systemd[1]: Starting Squid caching proxy... Sep 27 04:32:41 ip-10-0-0-83.ec2.internal systemd[1]: Started Squid caching proxy. Sep 27 04:32:41 ip-10-0-0-83.ec2.internal squid[6894]: Squid Parent: will start 1 kids + systemctl enable squid Created symlink from /etc/systemd/system/multi-user.target.wants/squid.service to /usr/lib/systemd/system/squid.service. + systemctl is-enabled squid enabled
CloudWatch Agentのインストール・設定
/var/log/messages
と/var/log/squid/access.log
をCloudWatch Logsに出力したいので、EC2インスタンスにCloudWatch Agentのインストールと設定を行います。
設定手順は以下記事のCloudWatch Agentのインストール・設定
と同じ手順で行いました。
実行すると、以下の通りCloudWatch Logsに/var/log/messages
のログが出力されています。
なお、現時点では認証プロキシサーバーを経由した通信が発生していないため、/var/log/squid/access.log
のログは出力されていません。
ちなみに、Squidのログは/etc/logrotate.d/squid
でログローテートの設定がデフォルトでされていました。ローテーション周りの設定はweekly
の指定のみでmaxsize
の指定がないため、大量のアクセスがあった場合はログがディスクを圧迫する可能性があるので、本番運用する場合は気をつける必要がありますね。
/var/log/squid/*.log { weekly rotate 5 compress notifempty missingok nocreate sharedscripts postrotate # Asks squid to reopen its logs. (logfile_rotate 0 is set in squid.conf) # errors redirected to make it silent if squid is not running /usr/sbin/squid -k rotate 2>/dev/null # Wait a little to allow Squid to catch up before the logs is compressed sleep 1 endscript }
EFSファイルシステムのマウント
EFSファイルシステムを認証プロキシサーバーにマウントします。
マウントポイントはUser DataでDigest認証用ユーザーファイルの保存先ディレクトリとして作成した、/etc/squid/secrets
を指定します。
EFSファイルシステムのマウントコマンドはマネージメントコンソールから確認できます。
マネージメントコンソール上でマウントしたいEFSファイルシステムを選択し、アタッチ
をクリックします。
すると、EFSファイルシステムのマウントコマンドが表示されます。今回は、EC2インスタンスにEFSマウントヘルパーをインストールしていないので、NFSクライアントの使用
の方のコマンドを参考にします。
EFSファイルシステムのマウントコマンドの実行は、SSM Run Commandを使用して、2台の認証プロキシサーバー用のEC2インスタンスに対して同時に行います。
コマンドドキュメントでAWS-RunShellScript
を選択し、以下コマンドを入力して、2台の認証プロキシサーバー用のEC2インスタンスを指定して実行します。
# Mount the EFS file system in /etc/squid/secrets sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-c9d1d87d.efs.us-east-1.amazonaws.com:/ /etc/squid/secrets # Check the mount mount | grep nfs # Check disk size df -h
実行が完了すると、以下のようにステータスが成功
となりました。
ログを確認すると、意図した通り/etc/squid/secrets
にEFSファイルシステムがマウントされていることが確認できます。
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) fs-c9d1d87d.efs.us-east-1.amazonaws.com:/ on /etc/squid/secrets type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.0.0.81,local_lock=none,addr=10.0.0.157) Filesystem Size Used Avail Use% Mounted on devtmpfs 468M 0 468M 0% /dev tmpfs 479M 12K 479M 1% /dev/shm tmpfs 479M 412K 479M 1% /run tmpfs 479M 0 479M 0% /sys/fs/cgroup /dev/nvme0n1p1 8.0G 2.0G 6.0G 26% / tmpfs 96M 0 96M 0% /run/user/0 fs-c9d1d87d.efs.us-east-1.amazonaws.com:/ 8.0E 0 8.0E 0% /etc/squid/secrets
正しくマウントできることを確認したので、OS再起動をしてもEFSファイルシステムをマウントするように/etc/fstab
も設定します。
マウントオプションはこちらのAWS公式ドキュメントを参考に設定します。
# Check /etc/fstabfstab before changing settings sudo cat /etc/fstab # Add a setting to /etc/fstab to mount EFS filesystem to /etc/squid/secrets sudo sh -c "echo fs-c9d1d87d.efs.us-east-1.amazonaws.com:/ /etc/squid/secrets nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0 >> /etc/fstab" # Check /etc/fstabfstab after changing settings sudo cat /etc/fstab
実行すると、以下のようなログが出力されており、/etc/fstab
にEFSファイルシステムを/etc/squid/secrets
にマウントする設定が追加されたことが確認できます。
# UUID=55ee5a5f-d155-47e0-9121-e6f4522cb2bf / xfs defaults,noatime 1 1 # UUID=55ee5a5f-d155-47e0-9121-e6f4522cb2bf / xfs defaults,noatime 1 1 fs-c9d1d87d.efs.us-east-1.amazonaws.com:/ /etc/squid/secrets nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0
プロキシ認証用ユーザーの作成
Squidの設定の確認
プロキシ認証用ユーザーする前に、Squidの設定(/etc/squid/squid.conf
)について確認します。
/etc/squid/squid.conf
全体は以下の通りです。
# # Recommended minimum configuration: # # Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed acl localnet src 10.0.0.0/24 acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT # # Recommended minimum Access Permission configuration: # # Deny requests to certain unsafe ports http_access deny !Safe_ports # Deny CONNECT to other than secure SSL ports http_access deny CONNECT !SSL_ports # Only allow cachemgr access from localhost http_access allow localhost manager http_access deny manager # We strongly recommend the following be uncommented to protect innocent # web applications running on the proxy server who think the only # one who can access services on "localhost" is a local user #http_access deny to_localhost # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # # Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed # Require digest authentication. auth_param digest program /usr/lib64/squid/digest_file_auth -c /etc/squid/secrets/.digestpasswd auth_param digest children 20 startup=0 idle=1 auth_param digest realm Squid proxy-caching web server. It uses digest authentication. auth_param digest nonce_garbage_interval 5 minutes auth_param digest nonce_max_duration 30 minutes auth_param digest nonce_max_count 50 acl auth_users proxy_auth REQUIRED http_access allow localnet auth_users http_access allow localhost # And finally deny all other access to this proxy http_access deny all # Squid normally listens to port 3128 http_port 0.0.0.0:8080 # Uncomment and adjust the following to add a disk cache directory. #cache_dir ufs /var/spool/squid 100 16 256 # Leave coredumps in the first cache dir coredump_dir /var/spool/squid # # Add any of your own refresh_pattern entries above these. # refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320 # Hiding client and proxy information forwarded_for off request_header_access Referer deny all request_header_access X-Forwarded-For deny all request_header_access Via deny all request_header_access Cache-Control deny all # Don't display the version on the error page. httpd_suppress_version_string on # Anonymize hostnames visible_hostname unknown # Setting log format to Apache combined logformat combined %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh access_log /var/log/squid/access.log combined
AWS CDKでEC2インスタンスをデプロイした際のUser Dataである./src/ec2/userDataSettingSquid.sh
で変更した箇所を中心に確認します。
クライアントのIPアドレスの範囲の指定
まず、クライアントのIPアドレスの範囲を指定します。
今回はVPCのCIDR(10.0.0.0/24
)以外のIPアドレスからのアクセスは許可しないので、localnet
というACL名で、クライアントのIPアドレスの範囲10.0.0.0/24
を指定しています。
acl localnet src 10.0.0.0/24
Digest認証および、ACLに対しての制御
次に、Digest認証および、ACLに対しての制御をしています。
Squidの公式ドキュメントを参考に指定しました。各設定項目について、コメントで補足しています。
# 認証を行うプログラムとを指定 # 今回はSquidインストール時に作成された /usr/lib64/squid/digest_file_auth を指定 # プロキシ認証用ユーザーファイルとして /etc/squid/secrets/.digestpasswd を指定 # パスワードをハッシュ化しているため、-c オプションを追加する、 auth_param digest program /usr/lib64/squid/digest_file_auth -c /etc/squid/secrets/.digestpasswd # 認証処理のプロセスの最大起動数を指定 auth_param digest children 20 startup=0 idle=1 # realmを指定 # 認証をする際に設定した値がクライアントに表示される auth_param digest realm Squid proxy-caching web server. It uses digest authentication. # クライアントで発行されたnonceの有効性をチェックする間隔を指定 auth_param digest nonce_garbage_interval 5 minutes # 指定されたnonceが有効である最大時間を指定 auth_param digest nonce_max_duration 30 minutes # 与えられたnonceの最大使用回数を指定 auth_param digest nonce_max_count 50 # プロキシ認証用ユーザーファイルに登録されたすべてのユーザーを認証対象として指定 acl auth_users proxy_auth REQUIRED # localnet(10.0.0.0/24)内からのアクセスは認証した上で許可する http_access allow localnet auth_users # localhostからの通信を許可する http_access allow localhost
不必要な情報の削除
接続先のWebサーバーや接続元のクライアントに対して、不必要に情報を教えたくないので、以下のように設定しました。
# クライアントのIPアドレスを追加しない forwarded_for off # HTTPヘッダーから、各種情報を削除する。 request_header_access Referer deny all request_header_access X-Forwarded-For deny all request_header_access Via deny all request_header_access Cache-Control deny all # エラーページにSquidのバージョンを表示させない httpd_suppress_version_string on # ホスト名を非表示 visible_hostname unknown
ログフォーマットの設定
SquidのデフォルトのログフォーマットだとUNIX時間で出力されます。一般人がUNIX時間を見るのはなかなか辛いので、Apache HTTP Serverのログの様に、combined形式に変更します。
logformat combined %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh access_log /var/log/squid/access.log combined
プロキシ認証用ユーザーの作成
それでは、プロキシ認証用ユーザーを作成します。
プロキシ認証用ユーザーの作成には、User Dataでインストールしたhttpd-tools
に含まれるhtdigest
コマンドを使用します。
以下コマンドで、/etc/squid/secrets/.digestpasswd
にプロキシ認証用ユーザーnon-97
の情報を追加します。パスワードはユーザーIDと同じnon-97
にしました。
$ sudo htdigest -c /etc/squid/secrets/.digestpasswd "Squid proxy-caching web server. It uses digest authentication." non-97 Adding password for non-97 in realm Squid proxy-caching web server. It uses digest authentication.. New password: Re-type new password:
作成した/etc/squid/secrets/.digestpasswd
を確認すると、パスワードnon-97
が568ee16a85bdf37b9043f3260329a847
にハッシュ化されていることが確認できます。
$ ls -la /etc/squid/secrets/.digestpasswd -rw-r--r-- 1 root root 103 Sep 24 06:42 /etc/squid/secrets/.digestpasswd $ sudo cat /etc/squid/secrets/.digestpasswd non-97:Squid proxy-caching web server. It uses digest authentication.:568ee16a85bdf37b9043f3260329a847
ちなみに、ハッシュ化された文字列はユーザーIDとパスワード、realmを:
で結合した文字列をMD5でハッシュ化したものです。
そのため、以下のようにmd5sum
コマンドでハッシュ値を求めることもできます。
# "echo" は末尾に改行文字が入るため、"-n" で改行文字を追加せずに、"md5sum" に渡す $ echo -n "non-97:Squid proxy-caching web server. It uses digest authentication.:non-97" | md5sum 568ee16a85bdf37b9043f3260329a847 -
動作確認
プロキシの設定
クライアント用のWindows Serverにログインして、プロキシの設定をします。
クライアントとなるWindows ServerへのログインはSSMセッションマネージャーのポートフォワーディング機能を使って、RDP接続をします。
以下コマンドで、ポートフォワーディングによる接続を確立させたのち、RDPクライアントでRDP接続を行います。
> aws ssm start-session --target i-05536fe459639e1d4 --document-name AWS-StartPortForwardingSession --parameters portNumber=3389,localPortNumber=13389 Enter MFA code for arn:aws:iam::<AWSアカウントID>:mfa/<IAMユーザー名>: Starting session with SessionId: botocore-session-1632473086-0cb51cdab36846b70 Port 13389 opened for sessionId botocore-session-1632473086-0cb51cdab36846b70. Waiting for connections... Connection accepted for session [botocore-session-1632473086-0cb51cdab36846b70]
IEを起動して、NLBのDNS名proxy-nlbbc-833edw0y5wj8-17b2194480b9e4d2.elb.us-east-1.amazonaws.com
をプロキシサーバーのアドレスとして指定します。
これで準備OKです。
認証プロキシサーバーが2台起動している場合の動作
試しにIEから、 DevelopersIO (https://dev.classmethod.jp/) にアクセスしてみます。
アドレスバーに https://dev.classmethod.jp/ を入力して、アクセスすると認証のポップアップが表示されました。
サーバーからの報告
に、指定したrealm
であるSquid proxy-caching web server. It uses digest authentication.
が表示されていることも確認できますね。
プロキシ認証用のユーザーIDとパスワードを入力して、OK
をクリックすると、正常にDevelopersIOにアクセスできました。
CloudWatch Logsにて、Squidのアクセスログである/var/log/squid/access.log
ロググループを確認すると、ユーザーnon-97
で認証をして、 https://dev.classmethod.jp/ にアクセスした際のログが記録されています。
10.0.0.149 - - [24/Sep/2021:08:59:08 +0000] "CONNECT dev.classmethod.jp:443 HTTP/1.0" 407 4240 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" TCP_DENIED:HIER_NONE 10.0.0.149 - non-97 [24/Sep/2021:09:04:03 +0000] "CONNECT dev.classmethod.jp:443 HTTP/1.0" 200 407153 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" TCP_TUNNEL:HIER_DIRECT 10.0.0.149 - non-97 [24/Sep/2021:09:07:03 +0000] "CONNECT dev.classmethod.jp:443 HTTP/1.0" 407 4606 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" TCP_DENIED:HIER_NONE 10.0.0.149 - non-97 [24/Sep/2021:09:07:08 +0000] "CONNECT dev.classmethod.jp:443 HTTP/1.0" 200 46082 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" TCP_TUNNEL:HIER_DIRECT
続いて、正常に負荷分散されているか確認するために、アクセス元のグローバルIPアドレスを表示する http://checkip.amazonaws.com/ に数回アクセスして、表示されるIPアドレスが変わるのか確認します。
http://checkip.amazonaws.com/ にアクセスし、何回かリロードしましたがIPアドレスは変わらず、44.195.212.104
でした。
こちらのグローバルIPアドレスはus-east-1b
のNAT Gatewayに割り当てているElastic IPアドレスです。
試しに、別のタブで http://checkip.amazonaws.com/ にアクセスすると、こちらは44.199.158.44
が表示されました。
こちらのグローバルIPアドレスはus-east-1a
のNAT Gatewayに割り当てているElastic IPアドレスです。
正しく振り分けられているようですね。また、複数の認証プロキシサーバーに振り分けられても再度認証は発生しないようですね。
認証プロキシサーバーを1台停止させた場合の動作
次に、認証プロキシサーバーを1台停止させた場合の動作を確認します。
試しにus-east-1b
の認証プロキシサーバーを停止させました。
ターゲットグループを確認すると、確かにus-east-1b
の認証プロキシサーバーのステータスが、unhealthy
になっています。
この状態で各タブをリロードすると、どちらもus-east-1a
のNAT Gatewayに割り当てているElastic IPアドレスである44.199.158.44
が表示されるようになりました。(見やすくする度にタブをウィンドウに分けて並べています)
正常に稼働している方の認証プロキシサーバーにのみ、アクセスが振り分けられていることが確認できます。
認証プロキシサーバーを全て停止させた場合の動作
なんとなく、認証プロキシサーバーを全て停止させた場合の動作も確認します。
us-east-1a
の認証プロキシサーバーを追加で停止させました。ターゲットグループを確認すると、どちらの認証プロキシサーバーのステータスもunhealthy
になっていました。
この状態で各タブをリロードすると、どちらもプロキシ サーバーは応答していません
と表示されるようになりました。
当然ですね。
それでは、/etc/fstab
が正常に設定されていることを確認するために、認証プロキシサーバーを2台とも起動して、http://checkip.amazonaws.com/ にアクセスしてみます。
この状態でブラウザをリロードすると、特に再認証はされず、44.199.158.44
が表示されるようになりました。
/etc/fstab
が正常に設定されており、再起動後もEFSファイルシステムをマウントできていそうですね。
プロキシ認証用ユーザーを追加した時の動作
最後にプロキシ認証用ユーザーを追加した時の動作確認をします。
まず、OSに保存されているプロキシ認証用ユーザーの資格情報を削除します。
コンパトロールパネルを開き、ユーザーアカウント
- 資格情報マネージャー
を開きます。Windows資格情報からプロキシサーバーのDNS名(今回はproxy-nlbbc-833edw0y5wj8-17b2194480b9e4d2.elb.us-east-1.amazonaws.com
)の資格情報を展開し、ユーザーIDがnon-97
であることを確認し削除をクリックします。
削除する資格情報が正しいことを確認して、はい
をクリックします。
次に、認証プロキシサーバーにログインして、以下コマンドでプロキシ認証用ユーザーnonpi
を追加します。
$ sudo htdigest /etc/squid/secrets/.digestpasswd "Squid proxy-caching web server. It uses digest authentication." nonpi Adding user nonpi in realm Squid proxy-caching web server. It uses digest authentication. New password: Re-type new password:
htdigest
コマンドで2つ目以降の認証用ユーザーを作成する際は、ファイルパスの前に-c
を付けないようにします。仮に-c
を付けると、
Apache HTTP Serverの htdigest コマンド公式ドキュメントで紹介されているとおり、追記ではなく、ファイルを上書きしてしまいます。
/etc/squid/secrets/.digestpasswd
を表示すると、nonpi
の行が追加されていることが確認できます。
$ sudo cat /etc/squid/secrets/.digestpasswd non-97:Squid proxy-caching web server. It uses digest authentication.:568ee16a85bdf37b9043f3260329a847 nonpi:Squid proxy-caching web server. It uses digest authentication.:ca4bd989702ade54229f2de8d1efc212
IEを全て閉じて、再度IEを立ち上げると認証のポップアップが表示されました。
追加したプロキシ認証用ユーザーnonpi
の認証情報を入力して、OK
をクリックすると、正常にアクセスできました。Squidのサービスの再起動や設定のリロードは不要みたいですね。
資格情報マネージャーを確認すると、プロキシ認証用ユーザーnonpi
の資格情報が追加されていました。
また、CloudWatch Logsにて、/var/log/squid/access.log
ロググループを確認すると、ユーザーnonpi
で認証をして、http://checkip.amazonaws.com/ にアクセスした際のログが記録されています。
10.0.0.149 - nonpi [24/Sep/2021:10:36:44 +0000] "GET http://checkip.amazonaws.com/ HTTP/1.1" 407 4790 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" TCP_DENIED:HIER_NONE 10.0.0.149 - nonpi [24/Sep/2021:10:36:44 +0000] "GET http://checkip.amazonaws.com/ HTTP/1.1" 200 233 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" TCP_MISS:HIER_DIRECT
認証プロキシサーバーのAuto Scallingもしてみた
どうせなら負荷状況に応じてスケーリングもさせたい
認証プロキシサーバーを冗長化できていることを確認できました。
ですが、ここまで設定したのであれば、負荷状況に応じてスケーリングできるようにしたいなと思いました。
そこで、認証プロキシサーバーをAuto Scallingで、負荷状況に応じてスケーリングさせたいと思います。
AMIの作成
Auto Scallingさせるためには、起動テンプレートが必要となります。また、起動テンプレートを作成する際には、起動に使うAMIを指定する必要があります。そのため、まず認証プロキシサーバーのAMIを作成します。
認証プロキシサーバーを選択して、アクション
- イメージとテンプレート
- イメージを作成
をクリックします。そして、イメージ名や、Nameタグを入力して、イメージを作成
をクリックします。
作成したAMIのステータスがavailable
になることを確認します。
起動テンプレートの作成
AMIの作成が完了したので、起動テンプレートを作成します。
まず、テンプレートの起動
から起動テンプレートを作成
をクリックします。
続いて、起動テンプレート名やAMI、インスタンスタイプなど必要な情報を設定し、起動テンプレートを作成
をクリックします。なお、EC2 Auto Scallingで使用できるテンプレートをセットアップする際に役立つガイダンスを提供
にチェックを入れることで、Auto Scallingで使用する際に設定すべき項目が分かりやすくなります。
起動テンプレートの作成に成功すると、以下のような画面が表示されます。作成した起動テンプレートを確認する際は、起動テンプレートを表示
をクリックします。
起動テンプレートを表示
をクリックすると、確かに起動テンプレートが作成されていることが確認できます。
Auto Scalling Groupの作成
起動テンプレートの作成が完了したので、Auto Scalling Groupを作成します。
まず、Auto Scalling グループを作成する
をクリックします。
続いて、Auto Scalling Groupの名前および、起動テンプレートを設定して、次へ
をクリックします。
次に、Auto Scallingで作成されるEC2インスタンスの購入オプションや、起動するネットワークを設定します。設定が完了したら、次へ
をクリックします。
次に、Auto Scallingで作成されるEC2インスタンスに接続するロードバランサーの設定を行います。設定が完了したら、次へ
をクリックします。
次に、スケーリングのポリシーを指定します。今回はCPU使用率に応じて最大4台までスケーリングするよう設定しました。設定が完了したら、次へ
をクリックします。
次に、スケーリング時の通知の設定です。今回は設定しないので、何もせずに次へ
をクリックします。
次に、タグの設定です。こちらも今回は設定しないので、何もせずに次へ
をクリックします。
最後に設定の確認です。設定を確認して問題なければ、Auto Scalling グループの作成
をクリックします。
動作確認
それでは、Auto Scallingの動作確認を行います。
Auto Scalling Groupを作成して、しばらくすると、ターゲットグループにEC2インスタンスが2台追加されました。
スケーリングポリシーとして「平均CPU使用率が50%以上の時スケーリングする」と設定しました。せっかくなので、EC2インスタンスのCPUに負荷をかけて、正しくスケーリングするかも確認します。
CPUに負荷をかけるために、Auto Scallingで追加された各EC2インスタンスで、以下コマンドを実行します。こちらは複数のCPUコア数分、暗号アルゴリズムのパフォーマンスをテストするコマンドです。
$ openssl speed -multi `grep processor /proc/cpuinfo|wc -l`
上述のコマンドを実行して、しばらくすると、CPU使用率が50%を超えていることが確認できました。
ターゲットグループを確認すると、確かに1台EC2インスタンスが追加されていました。
追加されたEC2インスタンスのステータスがhealthy
になった後、認証プロキシが正常に動作するかも確認します。
資格情報を削除して、IEを再起動すると、認証のポップアップが表示されました。また、認証後は意図したサイトにアクセスできることも確認できました。
EFSとNLBを使えば簡単に認証プロキシサーバーを冗長化できるよ
特別な設定は必要なく、NLB + EFS + Squidで、認証プロキシサーバーの冗長化を行うことができました。
Squidは触るのは2年ぶりぐらいだったので、良いリハビリになりました。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!